/**
 * gislin 2017年8月24日
 */
package com.btcode.orm.model;

import com.btcode.exception.MsgException;
import com.btcode.orm.executer.IORMExecuter;
import java.io.Serializable;

/**
 * @author gislin 针对：一对一，多对一的字段映射处理 2017年8月24日
 */
public class TableDomainField implements IDomainField, Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    IField domainPKFieldName;

    IField domainTextFieldName;

    IField fieldName;

    String fieldAliasName;

    /**
     * @param domainPKFieldName 域表主键名称
     * @param domainTextFieldName 域表text字段名称
     * @param fieldName 本表字段名
     * @param fieldAliasName 字段别名
     */
    public TableDomainField(IField domainPKFieldName, IField domainTextFieldName,
                            IField fieldName) {
        this.domainPKFieldName = domainPKFieldName;
        this.domainTextFieldName = domainTextFieldName;
        this.fieldName = fieldName;
        this.fieldAliasName = fieldName.getFieldName() + "_DESC";
    }

    @Override
    public Object getDomainValue(Object fieldValue, IORMExecuter ormExecuter) {
        try {
            IModel domainModel = domainPKFieldName.getModelClass().newInstance();
            String domainPkFieldName = domainPKFieldName.getFieldName();
            domainModel.setFieldValue(domainPkFieldName, fieldValue);
            domainModel = ormExecuter.getModelWithOutRelation(domainModel);

            if (domainModel != null) {
                return domainModel.getFieldValue(domainTextFieldName.getFieldName());
            }

            return null;
        }
        catch (Exception e) {
            throw new MsgException("获取域model出错", e);
        }
    }

    @Override
    public IField getFieldName() {
        return fieldName;
    }

    @Override
    public String getDomainFieldAliasName() {
        return fieldAliasName;
    }


}
